/* TODO action文件相对比较独立  只是声明要干的动作和数据 不具体实现
action：只是声明要干的动作和数据 不具体实现   他给容器映射方法(mapDispatch)，reducer给容器映射state
export default connect(mapStateToProps,mapDispatchToProps)(CountUI)
	此文件专门为Count组件生成action对象
*/
//常量的值就是小写的字符串而已
import {INCREMENT,DECREMENT} from '../constant'

//同步action，就是指action的值为Object类型的一般对象 increment将来传给容器
/*todo data的由来：
		//todo 调用redux传给自己的action
		this.props.increment(value*1)
		*/
export const increment = data => ({type:INCREMENT,data})
export const decrement = data => ({type:DECREMENT,data})

//异步action，就是指action的值为函数,异步action中一般都会调用同步action，异步action不是必须要用的。
export const incrementAsync = (data,time) => {
	//fixme 只有异步action 才需要dispatch  同步不需要dispatch？？？
    /*fixme 同步action不需要dispatch   异步action调用同步action就需要 dispatch
      fixme  或者同步action在异步代码块里（如async）就需要加dispatch
      todo 为了能够使用dispatch 需要使用一个匿名函数 参数接收dispatch
     */
	return (dispatch)=>{
		setTimeout(()=>{
			dispatch(increment(data))
		},time)
	}
}

/*上面的increment原型是这样的：
*  function increment (data) {
*  		//返回值是一个对象
       return {type:'increment',data:data}
}
箭头函数形式：  const increment = (data) =>{
    return {type:'increment',data:data}

}//如果返回值是个对象的话，简写之后对象要包个小括号，即({type:INCREMENT,data})
* */